Technote 1103

Uniquely Identifying a Mac OS Computer


ñ⁄éü

Mac OS ÉRÉìÉsÉÖÅ[É^ÇÃéØï ï˚ñ@

ÇŸÇ⁄ÉÜÉjÅ[ÉNÇ»ì¡ê´

ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉX

Gestalt

ÉCÅ[ÉTÉlÉbÉgÉAÉhÉåÉX

ÉnÅ[ÉhÉfÉBÉXÉNÇÃÉVÉäÉAÉãî‘çÜ

SCSI ÇÃåáä◊ÉäÉXÉg

ÉVÉXÉeÉÄÉtÉHÉãÉ_ÇÃÉfÉBÉåÉNÉgÉä ID

É{ÉäÉÖÅ[ÉÄçÏê¨ì˙ït

ÉlÉbÉgÉèÅ[ÉNÇ÷ÇÃìoò^

Ç∑Ç◊Ç´Ç≈ÇÕǻǢDZÇΔ

åãò_

Ç‹ÇΔÇfl
Mac OS ÉxÅ[ÉXÇÃÉRÉìÉsÉÖÅ[É^ÇÃÇ∑Ç◊ǃÇÃÉÇÉfÉãÇ≈ã§í Ç…óòópâ¬î\Ç»ÉVÉäÉAÉãî‘çÜÇÕdžÇËÇ‹ÇπÇÒÅBï°êîÇà Mac OS ÉRÉìÉsÉÖÅ[É^ÇãÊï Ç∑ÇÈãZñ@ÇÕÇ¢Ç≠ǬǩdžÇËÇ‹Ç∑ÅBDZÇà TECHNOTE Ç≈ÇÕǪÇÃãZñ@Çê‡ñæÇµÇ‹Ç∑ÅB

É}ÉVÉìÇéØï Ç∑ÇÈñ⁄ìIÇÃÇ–ÇΔǬÇÕÉRÉsÅ[ÉvÉçÉeÉNÉgÇ≈Ç∑ÅBDTS ÇÕÅAÉRÉsÅ[ÉvÉçÉeÉNÉgÇÉTÉ|Å[ÉgǵNjÇπÇÒÅBå›ä∑ê´Ç…ä÷ÇÌÇÈñ‚ëËÇ™ëÂǴǢǩÇÁÇ≈Ç∑ÅBDZÇà TECHNOTE ÇÕÅAéÑÇΩÇøÇ™âflãéÇ…égópǵÇΩÇËÅAêÑèßǵÇΩãZñ@ÇÇ‹ÇΔÇflÇΩLJÇÃÇ≈Ç∑ÅBDTS ÇÕÅAÉRÉsÅ[ÉvÉçÉeÉNÉgãZñ@ÇèWÇflǃǢÇÈÇÌÇØÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBñ{äiìIÇ»ÉRÉsÅ[ÉvÉçÉeÉNÉgÇÕDZÇà TECHNOTE Ç≈ê‡ñæÇ∑ÇÈÇÊÇËÇÕÇÈǩDžï°éGÇ≈Ç∑ÅB


Mac OS ÉRÉìÉsÉÖÅ[É^ÇÃéØï ï˚ñ@

ÉPÅ[ÉXäOïîÇ…ì\ǡǃdžÇÈÉoÅ[ÉRÅ[ÉhÉâÉxÉãÇ…àÛç¸Ç≥ÇÍǃǢÇÈÉVÉäÉAÉãî‘çÜÇæÇØÇ™ÅAMac OS ÉxÅ[ÉXÇÃÉRÉìÉsÉÖÅ[É^ÇéØï Ç≈Ç´ÇÈÇÊǧDžǻǡǃǢNjÇ∑ÅBåªç›ÅAîÃîÑÇ≥ÇÍǃǢÇÈ Mac OS ÉRÉìÉsÉÖÅ[É^ÇÃÉçÉWÉbÉNÉ{Å[ÉhÇ…ÇÕÇ«ÇÍLJì‡ïîÉVÉäÉAÉãî‘çÜÇÕñÑÇflçûÇ‹ÇÍǃǢNjÇπÇÒÅBÉIÉyÉåÅ[ÉeÉBÉìÉOÉVÉXÉeÉÄDžLJì‡ïîÉVÉäÉAÉãî‘çÜÇÕdžÇËÇ‹ÇπÇÒÅBñ{ìñÇÃÉVÉäÉAÉãî‘çÜÇ™ñÑÇflçûÇ‹ÇÍÇΩóBàÍÇÃÉRÉìÉsÉÖÅ[É^ÇÕÅAMacintosh XL Ç≈Ç∑ÅBDZÇÃÉ}ÉVÉìÇ…ÉVÉäÉAÉãî‘çÜǙdžÇÈÇÃÇÕÅADZÇÃÉ}ÉVÉìÇÃÉxÅ[ÉXDžǻǡÇΩ Lisa Ç…ÉVÉäÉAÉãî‘çÜǙdžǡÇΩÇ©ÇÁÇ≈Ç∑ÅBMacintosh XL ÇÕ 1986 îN 8 åéÇ…êªë¢í‚é~DžǻǡÇΩÇΩÇflÅAåªç›Ç≈ÇÕêîLJè≠Ç»Ç≠ÅAç°ì˙ÇÃésèÍDžǮǢǃÇÕçló∂Ç∑Ç◊Ç´ëŒè€ÇΔÇÕÇ»ÇÁǻǢÇ≈ǵÇÂǧÅB

Mac OS ÉRÉìÉsÉÖÅ[É^ÇÃàÍïîÇÃÉÇÉfÉãÇ…ÇÕÅAÉVÉäÉAÉãî‘çÜÇΔǵǃégópÇ≈Ç´ÇÈéØï î‘çÜÇéùǬÉnÅ[ÉhÉEÉFÉAÉfÉoÉCÉXÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBÇΩÇΔǶnjÅAÉ}ÉVÉìÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈÇ©ÅAì‡ë†Ç≥ÇÍÇΩÉCÅ[ÉTÉlÉbÉgÉJÅ[ÉhÇ≈Ç∑ÅB (ÉCÅ[ÉTÉlÉbÉgÉfÉoÉCÉXÇ…ÇÕÉfÉoÉCÉXÇ≤ÇΔÇ…ÉÜÉjÅ[ÉNÇ» ID ǙdžÇÈÇΩÇflÇ≈Ç∑ÅB) ÉnÅ[ÉhÉfÉBÉXÉNÉhÉâÉCÉuÇÃǻǩDžÇÕÅAÇ∑Ç◊ǃÇ≈ÇÕdžÇËÇ‹ÇπÇÒÇ™ÅASCSI Manager Ç‹ÇΩÇÕ ATA Manager Ç≈ì«Ç›èoÇπÇÈÉVÉäÉAÉãî‘çÜÇéùǬLJÇÃLJdžÇËÇ‹Ç∑ÅBÉgÅ[ÉNÉìÉäÉìÉOÉJÅ[ÉhÇ‚ FireWire DžLJÅAÉVÉäÉAÉãî‘çÜÇΔǵǃégópâ¬î\Ç»ÉÜÉjÅ[ÉNÇ»éØï î‘çÜÇéùǬLJÇÃǙdžÇËÇ‹Ç∑ÅBDZÇÍÇÁÇÃÉnÅ[ÉhÉEÉFÉAÉfÉoÉCÉXÇÃíÜÇ≈ÅAMacintosh ÇÃëSêªïiÉâÉCÉìÇ≈ã§í Ç»Ç‡ÇÃÇÕdžÇËÇ‹ÇπÇÒÅB

ÇŸÇ⁄ÉÜÉjÅ[ÉNÇ»ì¡ê´

É\ÉtÉgÉEÉFÉAÇ™ÅAà»ëOÇΔìØÇ∂É}ÉVÉìÇ≈ìÆçÏǵǃǢÇÈǩǫǧǩÇîªífÇ∑ÇÈéëóøÇΔÇ»ÇÈÅuÇŸÇ⁄ÉÜÉjÅ[ÉNÅvÇΔǢǶÇÈÇÊǧǻì¡ê´Ç‡Ç†ÇËÇ‹Ç∑ÅBDZÇÍÇÁÇóLå¯Ç»Ç‡ÇÃÇ©ÇÁèáÇ…à»â∫Ç…óÒãìǵNjÇ∑ÅB

ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉX

ÉAÉvÉäÉPÅ[ÉVÉáÉìÉtÉ@ÉCÉãÇÃÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇçÏê¨ÇµÅAï€ë∂Ç∑ÇÈï˚ñ@Ç≈Ç∑ÅBÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇÕÅAPBCreateFileIDRef() Ç≈çÏê¨ÇµÅAìKêÿÇ»èÍèäÇ…ï€ë∂ǵNjÇ∑ÅB (ï€ë∂Ç…ìKǵÇΩèÍèäÇÃó·ÇΔǵǃÇÕÅAèâä˙ê›íËÉtÉ@ÉCÉãǙdžÇËÇ‹Ç∑ÅBï€ë∂Ç…ìKÇ≥ǻǢèÍèäÇÃó·ÇÕÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉäÉ\Å[ÉXÉtÉHÅ[ÉNÇ≈Ç∑ÅBDZÇÍÇæÇΔÉçÉbÉNÇ≥ÇÍÇΩÉÅÉfÉBÉAÇ‚ÉlÉbÉgÉèÅ[ÉNÉTÅ[ÉoÇ©ÇÁÉAÉvÉäÉPÅ[ÉVÉáÉìÇãNìÆÇ∑ÇÈèÍçáÇ…ÇÕóòópÇ≈Ç´Ç‹ÇπÇÒÅB) ǪÇÃÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇÅAìÆçÏíÜÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉX (ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇÕ PBGetCatInfo Ç™ï‘Ç∑ ioFileID ÉtÉBÅ[ÉãÉhDždžÇËÇ‹Ç∑) ÇΔî‰ärǵNjÇ∑ÅBDZÇÍÇ™à·Ç¡ÇƒÇ¢ÇÍÇŒÅAï ÇÃÉ{ÉäÉÖÅ[ÉÄÇ≈ìÆçÏǵǃǢÇÈDZÇΔÇ™ÇÌÇ©ÇËÇ‹Ç∑ÅBÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇÕì¡íËÇÃÉ{ÉäÉÖÅ[ÉÄì‡Ç≈ÇÕÉÜÉjÅ[ÉNÇ≈Ç∑ÅBçƒóòópÇ≥ÇÍÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÅBï ÇÃÉ}ÉVÉìÇ≈ìØÇ∂ÉtÉ@ÉCÉãÇ…ìØÇ∂ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇ™äÑÇËìñǃÇÁÇÍÇÈâ¬î\ê´ÇÕîÒèÌÇ…è≠ǻǢÇ≈Ç∑ÅB

// AddFileID ÇÕ FSSpec Ç≈éwíËÇ≥ÇÍÇΩÉtÉ@ÉCÉãÇÃ
// ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇçÏê¨ÇµÇ‹Ç∑ÅB
// DZÇÃä÷êîÇ™ï‘Ç∑ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇÕÅA
// å„Ç≈égópÇ∑ÇÈÇΩÇflÇ…ï€ë∂ǵǃǮǴNjÇ∑ÅB
//
OSErr   AddFileID(FSSpec *file, long *fileID)
{
        OSErr                   err;
        HParmBlkPtr             h;

        h = (HParmBlkPtr)NewPtrClear(sizeof(HParamBlockRec));

        h->fidParam.ioCompletion = nil;
        h->fidParam.ioNamePtr = file->name;
        h->fidParam.ioVRefNum = file->vRefNum;
        h->fidParam.ioSrcDirID = file->parID;

        err = PBCreateFileIDRefSync(h);
        *fileID = h->fidParam.ioFileID;
        DisposePtr((void *)h);
        return(err);
}

// GetFileID ÇÕÅAâflãéÇ… (PBCreateFileIDRef ÇåƒÇ—èoǵǃ)
// ÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇçÏê¨ÇµÇΩDZÇΔÇÃdžÇÈ
// ÉtÉ@ÉCÉãÇ™éùǬÅAÉtÉ@ÉCÉã ID ÉäÉtÉ@ÉåÉìÉXÇï‘ǵNjÇ∑ÅB
//
OSErr   GetFileID(FSSpec *file, long *fileID)
{
        OSErr                   err;
        CInfoPBPtr              cInfo;

        cInfo = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec));

        cInfo->hFileInfo.ioCompletion = nil;
        cInfo->hFileInfo.ioNamePtr = file->name;
        cInfo->hFileInfo.ioVRefNum = file->vRefNum;
        cInfo->hFileInfo.ioFDirIndex = 0;
        cInfo->hFileInfo.ioDirID = file->parID;

        err = PBGetCatInfoSync(cInfo);
        *fileID = cInfo->hFileInfo.ioDirID;
        DisposePtr((void *)cInfo);
        return(err);
}


Gestalt

Gestalt Manager ÇÕÅAÉ}ÉVÉìÇì¡íËÇ∑ÇÈÇÃÇ…ñóßǬÅAëΩÇ≠ÇÃèÓïÒÇ÷ÇÃÉAÉNÉZÉXÇâ¬î\DžǵNjÇ∑ÅBǪÇÃÇÊǧǻèÓïÒÇÃíÜÇ≈å∞íòǻLJÇÃÇÕÅAÉ}ÉVÉìÉ^ÉCÉv (gestaltMachineType ÉZÉåÉNÉ^Ç≈ï\Ç≥ÇÍÇ‹Ç∑) ÇΔê⁄ë±Ç≥ÇÍǃǢÇÈÉLÅ[É{Å[ÉhÇÃéÌófi (gestaltKeyboardType ÉZÉåÉNÉ^Ç≈ï\Ç≥ÇÍÇ‹Ç∑) Ç≈Ç∑ÅB

OSErr GetMachineAndKeyboardIDs(long *characteristics)
{
    long    response;
    OSErr   err;

    err = Gestalt(gestaltMachineType, &response);
    *characteristics = response << 16;
    if (!err)
        err = Gestalt(gestaltKeyboardType, &response);
    *characteristics |= response;
    return err;
}


ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇÃâ¸î≈Ç…ÇÊǡǃÅAGestalt ÇÃÉZÉåÉNÉ^Ç…ó\ä˙ÇπÇ ïœçXÇ™â¡Ç¶ÇÁÇÍÇÈèÍçáLJdžÇÈDZÇΔÇ…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅB

ÉCÅ[ÉTÉlÉbÉgÉAÉhÉåÉX

ÉCÅ[ÉTÉlÉbÉgÉJÅ[ÉhÇ™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈÇ©ÅAÇ‹ÇΩÇÕì‡ë†Ç≥ÇÍǃǢÇÈ Mac OS ÉRÉìÉsÉÖÅ[É^Ç≈ÇÕÅAcsCode Ç ENetGetInfo Ç…ê›íËǵǃ EGetInfo() ÇåƒÇ—èoÇ∑DZÇΔÇ≈ÅAåªç›äÑÇËìñǃÇÁÇÍǃǢÇÈÉCÅ[ÉTÉlÉbÉgÉAÉhÉåÉXÇ™éÊìæÇ≈Ç´Ç‹Ç∑ÅBè⁄ç◊ÇÕÅwInside Macintosh: NetworkingÅx (11-26 ÉyÅ[ÉWÇ®ÇÊÇ— 11-36 ÉyÅ[ÉW) ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBÉAÉbÉvÉãé–Ç≈ÇÕÅAOpen Transport ä¬ã´Ç≈ÉCÅ[ÉTÉlÉbÉgÉAÉhÉåÉXÇéÊìæÇ∑ÇÈÉTÉìÉvÉãÉRÅ[ÉhÇåˆäJǵǃǢNjÇ∑ÅB

DZÇÃãZñ@ÇÃñ‚ëËÇÕÅAÉfÉtÉHÉãÉgÇÃÉCÅ[ÉTÉlÉbÉgÉAÉhÉåÉXÇ™ÅAÉVÉXÉeÉÄÉtÉ@ÉCÉãì‡Çà 'eadr' É^ÉCÉvÇÃÉäÉ\Å[ÉXÇ≈íuÇ´ä∑ǶÇÃê›íËÇ™Ç≥ÇÍǃǢÇÈDZÇΔǙdžÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅBDZÇÍÇÕÅAÅwInside Macintosh: NetworkingÅx(11-26 ÉyÅ[ÉW) Ç…èëÇ©ÇÍǃǢNjÇ∑ÅBÉnÅ[ÉhÉEÉFÉAÉAÉhÉåÉXÇ™ïœçXâ¬î\ǻDZÇΔÅAì¡íËÇÃÉÇÉfÉãÇ…ÇÕïKÇ∏ÉCÅ[ÉTÉlÉbÉgǙdžÇÈÇΔǢǧï€èÿLJǻǢDZÇΔÇ©ÇÁÅADZÇÍÇÕǢǢï˚ñ@Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

ìØólÇÃãZñ@ÇÕÅAÉgÅ[ÉNÉìÉäÉìÉOÉJÅ[ÉhǂǪÇÃëºÇÃÉJÅ[ÉhÇ™ïtÇ¢ÇΩ Mac OS ÉRÉìÉsÉÖÅ[É^Ç≈LJégópÇ≈Ç´Ç‹Ç∑Ç™ÅADZÇÃï∂èëÇ≈ÇÕê‡ñæÇµÇ‹ÇπÇÒÅB

ÉnÅ[ÉhÉfÉBÉXÉNÇÃÉVÉäÉAÉãî‘çÜ

ÉnÅ[ÉhÉfÉBÉXÉNÇ…ÉVÉäÉAÉãî‘çÜÇ™ïtÇ¢ÇΩLJÇÃLJdžÇËÇ‹Ç∑ÅBATA/IDE ÉhÉâÉCÉuÇÃëΩÇ≠Ç…ÇÕÉVÉäÉAÉãî‘çÜǙdžÇËÇ‹Ç∑Ç™ÅASCSI ÉnÅ[ÉhÉfÉBÉXÉNÇ…ÇÕÇΩǢǃǢdžÇËÇ‹ÇπÇÒÅBÉAÉbÉvÉãÇÕÅAATA Ç‹ÇΩÇÕ IDE ÉhÉâÉCÉuÇÃÉVÉäÉAÉãî‘çÜÇéÊìæÇ∑ÇÈÉTÉìÉvÉãÉRÅ[ÉhÇåˆäJǵǃǢNjÇ∑ÅBATA Ç‚ IDE ÉhÉâÉCÉuÇ™ïtǢǃǢÇÈÇÃÇÕàÍïîÇà Macintosh Ç»ÇÃÇ≈ÅADZÇÍÇÕîƒópìIÇ…égǶÇÈÇÊǧǻó«Ç¢ï˚ñ@Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

SCSI ÇÃåáä◊ÉäÉXÉg

SCSI ÉhÉâÉCÉuÇÃåáä◊ÉäÉXÉgÇégǧÉfÉxÉçÉbÉpLJǢNjÇ∑ÅBDZÇÍÇÕ SCSI ÇÃǻǢÉ}ÉVÉìÇ≈ÇÕìÆÇ´Ç‹ÇπÇÒÇ™ÅASCSI ïtÇ´ÇÃÉ}ÉVÉìÇ≈ÇÕǢǢï˚ñ@ǩLJǵÇÍÇ‹ÇπÇÒÅBSCSI Manager ÇÃégópï˚ñ@ÇÃè⁄ç◊DžǬǢǃÇÕÅAÅwSCSI-2 SpecificationÅxÇ®ÇÊÇ—ÅwInside Macintosh:DevicesÅxÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBÅwTool Chest Developer CDÅxÇ…ÇÕÅASCSI Manager ÇÃàÍî ìIÇ»égópï˚ñ@Çé¶Ç∑É\Å[ÉXÉRÅ[ÉhÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBSCSI Ç™ïtǢǃǢÇÈÇÃÇÕàÍïîÇà Macintosh Ç»ÇÃÇ≈ÅADZÇÍÇÕîƒópñ⁄ìIÇ≈égǶÇÈÇÊǧǻó«Ç¢ï˚ñ@Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

ÉVÉXÉeÉÄÉtÉHÉãÉ_ÇÃÉfÉBÉåÉNÉgÉä ID

ÉVÉXÉeÉÄÉtÉHÉãÉ_Çà dirID Çî‰ärÇ∑ÇÈï˚ñ@Ç≈Ç∑ÅBFindFolder() ÇégǡǃÅAÉVÉXÉeÉÄÉtÉHÉãÉ_Çà dirID ÇÕéÊìæÇµÇƒÅAà»ëOï€ë∂ǵǃǮǢÇΩ dirID ÇΔî‰ärǵNjÇ∑ÅBDZÇÍÇÕÉtÉ@ÉCÉã ID ÇŸÇ«ÉÜÉjÅ[ÉNÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÉVÉXÉeÉÄÉtÉHÉãÉ_ÇÕÇ«ÇÃÉ}ÉVÉìÇ≈LJÇÕÇ∂ÇflÇ©ÇÁçÏê¨Ç≥ÇÍǃǢÇÈLJÇÃÇ»ÇÃÇ≈ÅAÉ}ÉVÉìÇ™à·Ç¡ÇƒÇ‡ìØÇ∂ÉfÉBÉåÉNÉgÉä ID ÇéùǬDZÇΔÇ™ëΩÇ¢ÇÃÇ≈Ç∑ÅBÉÜÅ[ÉUÇ™êVǵǢÉVÉXÉeÉÄÉtÉHÉãÉ_ÇçÏê¨Ç∑ÇÈÇΔ (ÉAÉbÉvÉOÉåÅ[ÉhÇÃç€Ç…ÅAÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇÉCÉìÉXÉgÅ[ÉãǵíºÇµÇΩÇΔǴǻǫ) ÅAà·Ç§ÉfÉBÉåÉNÉgÉä ID DžǻǡǃǵNjǢNjÇ∑ÅBDZÇÍÇÕÇÊÇ¢ï˚ñ@Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

// GetVolumeDirID ÇÕÉVÉXÉeÉÄÉtÉHÉãÉ_Çà dirID Çï‘ǵNjÇ∑ÅB
//
OSErr   GetVolumeDirID(long *dirID)
{
        OSErr                   err;
        short                   notUsed;

        err=FindFolder(kOnSystemDisk, kSystemFolderType, no,
                notUsed,dirID);
        return(err);
}


É{ÉäÉÖÅ[ÉÄçÏê¨ì˙

É{ÉäÉÖÅ[ÉÄÇÃçÏê¨ì˙Çî‰ärÇ∑ÇÈï˚ñ@Ç≈Ç∑ÅBDZÇÃèÓïÒÇÕ PBHGetVInfo() ÇégǡǃéÊìæÇ≈Ç´Ç‹Ç∑ÅBDZÇÍÇÕÉtÉ@ÉCÉã ID ÇŸÇ«ÉÜÉjÅ[ÉNÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÉ{ÉäÉÖÅ[ÉÄçÏê¨ì˙ÇÕÅAçHèÍÇ≈ÉVÉXÉeÉÄÉ\ÉtÉgÉEÉFÉAÇ™É{ÉäÉÖÅ[ÉÄÇ…ì¸ÇÍÇÁÇÍÇÈéûÇ…ê›íËÇ≥ÇÍÅAÉ{ÉäÉÖÅ[ÉÄÇçƒèâä˙âªÇ∑ÇÈÇΔǴDžǵǩÉäÉZÉbÉgÇ≥ÇÍǻǢǩÇÁÇ≈Ç∑ÅBDZÇÃílÇÕàÍòAÇÃÉ}ÉVÉìÇ≈ìØÇ∂Ç…Ç»ÇÈåXå¸Ç™Ç†ÇÈÇÃÇ≈ÅAÇÊÇ¢ï˚ñ@Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB

long    GetVolCreationDate(short vRefNum )
{
        OSErr           err = noErr;
        HParamBlockRec  pb;
        Str255          vName;

        vName [ 0 ] = '\0';
        pb.volumeParam.ioCompletion  = nil;
        pb.volumeParam.ioNamePtr     = vName;
        pb.volumeParam.ioVRefNum     = vRefNum;
        pb.volumeParam.ioVolIndex    = 0;
        err = PBHGetVInfoSync ( &pb );

        return ( pb.volumeParam.ioVCrDat);
}


ÉlÉbÉgÉèÅ[ÉNÇ÷ÇÃìoò^

Macintosh Çì¡íËÇ∑ÇÈÇÃÇ≈ÇÕÇ»Ç≠ÅAìØÇ∂ÉAÉvÉäÉPÅ[ÉVÉáÉìÇÃï°êîÇÃÉRÉsÅ[Ç™ìØÇ∂ÉlÉbÉgÉèÅ[ÉNÇ≈ìÆçÏÇ∑ÇÈDZÇΔÇîÇØÇÈï˚ñ@LJdžÇËÇ‹Ç∑ÅBàÍïîÇÃÉfÉxÉçÉbÉpÇ™égǧï˚ñ@ÇÕÅANBP (Name Binding Protocol) Ç≈âÀãÛÇÃÉfÉoÉCÉXÇÉlÉbÉgÉèÅ[ÉNÇ…ìoò^Ç∑ÇÈLJÇÃÇ≈ÅAǪÇÃñºëOÇ…ÇÕÅAäYìñÇÃÉâÉCÉZÉìÉXDždžÇΩÇÈíPàÍÇÃÉVÉäÉAÉãî‘çÜÇégǢNjÇ∑ÅB (Ç‡ÇøÇÎÇÒDZÇÃÉVÉäÉAÉãî‘çÜÇê∂ê¨Ç∑ÇÈï˚ñ@ÇÕïKóvÇ≈Ç∑ÅB) ìØÇ∂ÉfÉoÉCÉXÇΔÉVÉäÉAÉãî‘çÜÇï°êîâÒìoò^ǵÇÊǧÇΔÇ∑ÇÈÇΔÅAÉGÉâÅ[Ç™î≠ê∂Ç∑ÇÈÇÃÇ≈ÅAÉvÉçÉOÉâÉÄÇÕǪÇÃégópÇãëî€Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBNBP ÇÃè⁄ç◊ÇÕÅwInside Macintosh: NetworkingÅxÇÃëÊ 3 èÕDždžÇËÇ‹Ç∑ÅB

/*
 * éwíËÇÃÉ\ÉPÉbÉgÇ…ëŒÇµÇƒÅAéwíËÇÃÉIÉuÉWÉFÉNÉgÇΔÉ^ÉCÉvÇéùǬ
 * ÉGÉìÉeÉBÉeÉBÇìoò^ǵNjÇ∑ÅBä÷êîÇ™ noErr Çï‘ǵÇΩèÍçáÇÕÅA
 * NamesTableEntry Ç÷ÇÃÉ|ÉCÉìÉ^Ç™ ntePtr Ç…ï‘Ç≥ÇÍǃǢNjÇ∑ÅB
 */
OSErr MyRegisterName(ConstStr32Param entityObject,
                     ConstStr32Param entityType,
                     short socket,
                     NamesTableEntry **ntePtr)
{
    MPPParamBlock mppPB;
    OSErr   result;
    Str32   entityZone = "\p*";

    /* ÉlÅ[ÉÄÉeÅ[ÉuÉãÇÃÉGÉìÉeÉBÉeÉBÇäiî[Ç∑ÇÈçƒîzíuïsî\Ç»ÉÅÉÇÉäÇ
     * ÉVÉXÉeÉÄÉqÅ[ÉvÇ…äÑÇËìñǃNjÇ∑ÅB
     */
    *ntePtr = (NamesTableEntry *)
        NewPtrSys((Size)sizeof(NamesTableEntry));

    if ( ntePtr == NULL )
    {
        result = MemError(); /* ÉÅÉÇÉäÉGÉâÅ[Çï‘Ç∑ */
    }
    else
    {
        /* ÉlÅ[ÉÄÉeÅ[ÉuÉãÇÃÉGÉìÉeÉBÉeÉBÇçÏê¨Ç∑ÇÈ */
        NBPSetNTE((Ptr) *ntePtr,
                  (Ptr) entityObject,
                  (Ptr) entityType,
                  (Ptr) entityZone,
                  socket);

        /* ioRefNum ÇΔ csCode ÇÕ PRegisterName ÇÃÉOÉãÅ[Ç…ÇÊǡǃ
           ê›íËÇ≥ÇÍÇ‹Ç∑ */
        mppPB.NBPinterval = 0x0f; /* ä‘äuÇΔâÒêîÇìKêÿÇ»ílÇ… */
        mppPB.NBPcount = 0x03;    /* ê›íËǵNjÇ∑ */
        mppPB.NBPentityPtr = (Ptr) *ntePtr;
        mppPB.NBPverifyFlag = (char) true; /* ÉÜÉjÅ[ÉNÇ»ñºëO */

        result = PRegisterName(&mppPB, false);

        if ( result != noErr )
            DisposePtr((Ptr) *ntePtr);
    }

    return ( result );
}

íçà”:
DTS ÇÕÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉCÉìÉ^Å[ÉlÉbÉgëSëÃÇ≈ÉGÉìÉeÉBÉeÉBÇÃåüçıÇçsǧDZÇΔÇÕêÑèßǵNjÇπÇÒÅBDZÇÃÇÊǧǻåüçıÇÕéûä‘ǙǩǩÇÈÇ©ÇÁÇ≈Ç∑ÅBÇΩÇ≠Ç≥ÇÒÇÃÉ]Å[ÉìÇéùǬëÂÇ´Ç»ÉlÉbÉgÉèÅ[ÉNÇ≈ÇÕÅAåüçıÇÃÇΩÇflDžǩǻÇËÇÃéûä‘ÇîÔÇ‚Ç∑DZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBãNìÆéûÇÃÉRÅ[ÉhÇ≈çsǧèàóùÇΔǵǃÇÕìKêÿÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÇ©ÇÌÇËÇ…ÅAÉçÅ[ÉJÉãÉ]Å[ÉìÇåüçıÇ∑ÇÈDZÇΔÇÇ®Ç∑Ç∑ÇflǵNjÇ∑ÅBïKóvÇ»ÇÁÅAëºÇÃÉ]Å[ÉìÇ…ëŒÇ∑ÇÈåüçıÇÕÅAîÒìØä˙ÇÃÉoÉbÉNÉOÉâÉEÉìÉhèàóùÇΔǵǃé¿åªÇ∑ÇÈÇÃÇ™ÇÊÇ¢Ç≈ǵÇÂǧÅB


Ç∑Ç◊Ç´Ç≈ÇÕǻǢDZÇΔ

ägí£ÉpÉâÉÅÅ[É^ RAM (PRAM) ÇÃÇ§ÇøÅAï∂èëâªÇ≥ÇÍǃǢǻǢílÇ…óäǡǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBÉAÉbÉvÉãÇÕ PRAM ÇÃàÍïîÇåˆäJǵǃǢÇÈÇæÇØÇ≈ÅAëºÇÃïîï™ÇÕåˆäJǵǃǢNjÇπÇÒÅBè⁄ç◊DžǬǢǃÇÕÅAÅwInside Macintosh:Operating System UtilitiesÅxÇÃëÊ 7 èÕÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅBÉAÉbÉvÉãÇÕñ¢åˆäJÇà PRAM ÇÃà”ñ°ÇïœçXÇ∑ÇÈå†óòÇóØï€ÇµÇƒÇ¢Ç‹Ç∑ÅBPRAM ÇÃåˆäJóÃàÊà»äOÇ…èÓïÒÇï€ë∂Ç∑ÇÈDZÇΔÇÕÇ‚ÇflǃÇ≠ÇæÇ≥Ç¢ÅBDZÇÃÇÊǧǻ PRAM ÇÃåÎópÇÕÉVÉXÉeÉÄÇÃà¿íËê´Ç…èdëÂÇ»âeãøÇÇ®ÇÊÇ⁄Ç∑DZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB

ÉtÉHÅ[É}ÉbÉgǵÇΩÉtÉçÉbÉsÅ[Ç‚ì¡éÍÇ»ÉtÉçÉbÉsÅ[ÇÃì¡éÍÇ»ÉgÉâÉbÉNÇégǧï˚ñ@LJǮÇ∑Ç∑ÇflÇ≈Ç´Ç‹ÇπÇÒÅBÉAÉbÉvÉãÇÕÅADZÇÃÇÊǧǻópìrÇ… DTS Ç™ÉTÉ|Å[ÉgÇ≈Ç´ÇÈÇÊǧǻÉtÉçÉbÉsÅ[ÉhÉâÉCÉuÇÃèÓïÒÇíÒãüǵǃÇÕǢNjÇπÇÒÅBÇ‹ÇΩÅADiskCopy ǻǫÇÃÉfÉBÉXÉNÉRÉsÅ[ÉvÉçÉOÉâÉÄÇÕÅAîÒèÌDžǧNjÇ≠ìÆçÏǵÅAǪÇÃÇÊǧǻãZñ@ÇîjǡǃǵNjǢNjÇ∑ÅB (DiskCopy ÇÕÅAÉtÉçÉbÉsÅ[ÉhÉâÉCÉoÇÃÉ\Å[ÉXÉRÅ[ÉhÇå©Ç»Ç™ÇÁÅAÉAÉbÉvÉãì‡ïîÇ≈èëÇ©ÇÍÇΩLJÇÃÇ≈Ç∑ÅBè⁄ç◊ÇäOïîÇ…åˆäJÇ∑ÇÈó\íËÇÕdžÇËÇ‹ÇπÇÒÅB) ÉnÅ[ÉhÉfÉBÉXÉNÇÃì¡éÍÇ»ÉZÉNÉ^Ç…óäÇÈDZÇΔÇ‡Ç¢ÇØÇ‹ÇπÇÒ (ÉAÉbÉvÉãÇÕï°êîÇÃÉxÉìÉ_Ç©ÇÁïîïiÇçwì¸ÇµÇƒÇ¢Ç‹Ç∑ÅBì¡íËÇÃÉ}ÉVÉìÇ‚ì¡íËÇÃÉÇÉfÉãÇÃñ¢åˆäJïîï™Ç…ǬǢǃâΩÇÁÇ©ÇÃâºíËÇǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅB)
íçà”:
è´óàÇÃdžÇÈéûä˙DžǮǢǃÅAÉAÉbÉvÉãÇÕ 800K GCR ÉtÉHÅ[É}ÉbÉgÇÃÉtÉçÉbÉsÅ[ÇÉTÉ|Å[ÉgǵǻǢÉ}ÉVÉìÇêªë¢Ç∑ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBMac OS ÉRÉìÉsÉÖÅ[É^ÇÃéØï ÇÃñ⁄ìIÇ≈ÅA800K GCR ÉtÉHÅ[É}ÉbÉgǻǫÅAì¡íËÇÃÉnÅ[ÉhÉEÉFÉAã@î\Ç…óäÇÈÇ◊Ç´Ç≈ÇÕdžÇËÇ‹ÇπÇÒÅB


åãò_

DZDZÇ≈èqÇ◊ÇΩãZñ@ÇÕÅAÉRÉìÉsÉÖÅ[É^ÇÃéØï Ç…ñóßǬä»íPÇ»ï˚ñ@Ç≈Ç∑ÅBDZÇÍÇÁÇÃãZñ@ÇÕíPèÉÇ»ÉRÉsÅ[ÉvÉçÉeÉNÉgÇ…ÇÕï÷óòǩLJǵÇÍÇ‹ÇπÇÒÅBñ{äiìIÇ»ÉRÉsÅ[ÉvÉçÉeÉNÉgÇÃÇΩÇflÇÃÇÊÇËï°éGÇ»ãZñ@LJÇΩÇ≠Ç≥ÇÒdžÇËÇ‹Ç∑ÅBÇΩÇΔǶnjÅAADB ÉfÉoÉCÉXǻǫÇÃäOïîÉnÅ[ÉhÉEÉFÉAÇÅAÉâÉCÉZÉìÉXçœÇ›ÇÃÉ}ÉVÉìÇéØï Ç∑ÇÈëïíu (ÉnÅ[ÉhÉLÅ[ÇΔåƒÇŒÇÍÇ‹Ç∑) ÇΔǵǃégǧǻǫÅAÇÊÇ¢ï˚ñ@ǙdžÇËÇ‹Ç∑ÅBñ{äiìIÇ»ÉRÉsÅ[ÉvÉçÉeÉNÉgÇçsǧèÍçáÇÕÅAé©ï™Ç≈çÏê¨Ç∑ÇÈÇÃÇ≈ÇÕÇ»Ç≠ÅAÉRÉsÅ[ÉvÉçÉeÉNÉgÇêÍñÂÇ…Ç∑ÇÈâÔé–Ç™ÇΩÇ≠Ç≥ÇÒdžÇËÇ‹Ç∑ÇÃÇ≈ÅAñ‚Ç¢çáÇÌÇπǃǛǃÇ≠ÇæÇ≥Ç¢ÅBëΩÇ≠ÇÃÉTÅ[ÉhÉpÅ[ÉeÉBÇ™ÅAÉnÅ[ÉhÉEÉFÉAÇégǧêªïi (ADB ÇÃÉnÅ[ÉhÉLÅ[ǻǫ) Ç‚ÅAÉ\ÉtÉgÉEÉFÉAÇégǧêªïi (ÉâÉCÉZÉìÉVÉìÉOÉ\ÉtÉgÉEÉFÉA) ÇíÒãüǵǃǢNjÇ∑ÅB

Ç‹ÇΔÇfl

Mac OS ÇÕÉRÉsÅ[ÉvÉçÉeÉNÉgÇçló∂Ç…ì¸ÇÍǃê›åvÇ≥ÇÍǃÇÕǢNjÇπÇÒÅBMac OS ÉxÅ[ÉXÇÃÉRÉìÉsÉÖÅ[É^ÇÃÇ∑Ç◊ǃÇÃÉÇÉfÉãÇ≈ã§í Ç…óòópâ¬î\Ç»ÉVÉäÉAÉãî‘çÜLJdžÇËÇ‹ÇπÇÒÅBï°êîÇà Mac OS ÉRÉìÉsÉÖÅ[É^ÇéØï Ç∑ÇÈãZñ@ǙǢÇ≠ǬǩdžÇËÅADZÇà TECHNOTE Ç≈ÇÕǪÇÃãZñ@Çâê‡ÇµÇ‹ÇµÇΩÅB

DTS ÇÕÅAÉRÉsÅ[ÉvÉçÉeÉNÉgÇÉTÉ|Å[ÉgǵNjÇπÇÒÅBå›ä∑ê´Ç…ä÷ÇÌÇÈñ‚ëËÇ™ëÂǴǢǩÇÁÇ≈Ç∑ÅBDTS ÇÕÅAÉRÉsÅ[ÉvÉçÉeÉNÉgãZñ@ÇèWÇflǃǢÇÈÇÌÇØÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅB

éQçlï∂å£

ÅEÅwInside Macintosh: DevicesÅx
ÅEÅuATA Device Software GuideÅv
ÅEÅwInside Macintosh: NetworkingÅxÇÃëÊ 3 èÕÅuName Binding ProtocolÅv
ÅEÅuSCSI-2 specificationÅv